μΉ μ ν리μΌμ΄μ μ±λ₯ ν₯μμ μν JavaScript λ²λ€ λΆμ λꡬ, μ’ μμ± μΆμ , μ΅μ ν κΈ°μ λ° λͺ¨λ² μ¬λ‘μ λν ν¬κ΄μ μΈ κ°μ΄λμ λλ€.
JavaScript λ²λ€ λΆμ λꡬ: μ’ μμ± μΆμ λ° μ΅μ ν
μ€λλ μ μΉ κ°λ° νκ²½μμ JavaScript λ²λ€μ λλΆλΆμ μΉ μ ν리μΌμ΄μ μ μ€μΆμ λλ€. μ ν리μΌμ΄μ μ΄ λ³΅μ‘ν΄μ§μ λ°λΌ JavaScript λ²λ€μ ν¬κΈ°λ 컀μ§λλ€. ν° λ²λ€μ μΉ μ¬μ΄νΈ μ±λ₯μ μλΉν μν₯μ λ―Έμ³ λ‘λ© μκ°μ΄ λλ €μ§κ³ μ¬μ©μ κ²½νμ΄ μ νλ μ μμ΅λλ€. λ°λΌμ, μ±λ₯μ΄ μ’κ³ ν¨μ¨μ μΈ μΉ μ ν리μΌμ΄μ μ μ 곡νλ €λ©΄ JavaScript λ²λ€μ μ΄ν΄νκ³ μ΅μ ννλ κ²μ΄ μ€μν©λλ€.
μ΄ ν¬κ΄μ μΈ κ°μ΄λλ μ’ μμ± μΆμ λ° μ΅μ ν κΈ°μ μ μ€μ μ λκ³ JavaScript λ²λ€ λΆμ λꡬλ₯Ό μ΄ν΄λ΄ λλ€. λ²λ€ λΆμμ μ€μμ±μ μμΈν μμλ³΄κ³ , μ¬μ© κ°λ₯ν λ€μν λꡬλ₯Ό λ Όμνκ³ , λ²λ€ ν¬κΈ°λ₯Ό μ€μ΄κ³ μ λ°μ μΈ μ±λ₯μ ν₯μμν€κΈ° μν μ€μ©μ μΈ μ λ΅μ μ 곡ν©λλ€. μ΄ κ°μ΄λλ μ΄λ³΄μλΆν° μλ ¨λ μ λ¬Έκ°κΉμ§ λͺ¨λ κΈ°μ μμ€μ κ°λ°μλ₯Ό μν΄ μ€κ³λμμ΅λλ€.
JavaScript λ²λ€μ λΆμν΄μΌ νλ μ΄μ
JavaScript λ²λ€μ λΆμνλ©΄ λͺ κ°μ§ μ£Όμ μ΄μ μ΄ μμ΅λλ€:
- μ±λ₯ ν₯μ: λ μμ λ²λ€μ λ λΉ λ₯Έ λ‘λ© μκ°μΌλ‘ μ΄μ΄μ Έ λ λμ μ¬μ©μ κ²½νμ μ 곡ν©λλ€. μ¬μ©μλ λΉ λ₯΄κ² λ‘λλλ μΉ μ¬μ΄νΈμ μ°Έμ¬ν κ°λ₯μ±μ΄ λ λμ΅λλ€.
- λμν μλΉ κ°μ: λ μμ λ²λ€μ μ μ‘ν΄μΌ νλ λ°μ΄ν°κ° μ μΌλ―λ‘ μ¬μ©μ λ° μλ² λͺ¨λμ λν λμν λΉμ©μ μ€μ λλ€. νΉν κ°λ°λμκ΅μμ λ°μ΄ν° μκΈμ κ° μ νμ μ΄κ±°λ μΈν°λ· μ°κ²° μλκ° λλ¦° μ¬μ©μμκ² μ€μν©λλ€.
- μ½λ νμ§ ν₯μ: λ²λ€ λΆμμ ν΅ν΄ μ¬μ©νμ§ μλ μ½λ, μ€λ³΅ μ’ μμ± λ° μ μ¬μ μΈ μ±λ₯ λ³λͺ© νμμ νμ ν μ μμΌλ―λ‘ μ½λμ 리ν©ν λ§ λ° μ΅μ νλ₯Ό ν΅ν΄ μ μ§ κ΄λ¦¬ μ©μ΄μ±κ³Ό νμ₯μ±μ ν₯μμν¬ μ μμ΅λλ€.
- μ’ μμ±μ λν μ΄ν΄λ ν₯μ: λ²λ€μ λΆμνλ©΄ μ½λκ° μ΄λ»κ² ꡬμ±λκ³ μλ‘ λ€λ₯Έ λͺ¨λμ΄ μλ‘ μ΄λ»κ² μμ‘΄νλμ§ μ΄ν΄νλ λ° λμμ΄ λ©λλ€. μ΄ μ§μμ μ½λ κ΅¬μ± λ° μ΅μ νμ λν μ 보λ₯Ό λ°νμΌλ‘ κ²°μ μ λ΄λ¦¬λ λ° νμμ μ λλ€.
- λ¬Έμ μ‘°κΈ° κ°μ§: κ°λ° νλ‘μΈμ€ μ΄κΈ°μ ν° μ’ μμ± λλ μν μ’ μμ±μ μλ³νλ©΄ μ±λ₯ λ¬Έμ λ₯Ό λ°©μ§νκ³ λ²κ·Έ λ°μ μνμ μ€μΌ μ μμ΅λλ€.
λ²λ€ λΆμμ μ£Όμ κ°λ
νΉμ λꡬμ λν΄ μμΈν μμ보기 μ μ JavaScript λ²λ€ λ° ν΄λΉ λΆμκ³Ό κ΄λ ¨λ λͺ κ°μ§ κΈ°λ³Έμ μΈ κ°λ μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€:
- λ²λ€λ§: μ¬λ¬ JavaScript νμΌμ λ¨μΌ νμΌ(λ²λ€)λ‘ κ²°ν©νλ νλ‘μΈμ€μ λλ€. μ΄λ κ² νλ©΄ μΉ νμ΄μ§λ₯Ό λ‘λνλ λ° νμν HTTP μμ² μκ° μ€μ΄λ€μ΄ μ±λ₯μ΄ ν₯μλ©λλ€. Webpack, Parcel λ° Rollupκ³Ό κ°μ λκ΅¬κ° μΌλ°μ μΌλ‘ λ²λ€λ§μ μ¬μ©λ©λλ€.
- μ’ μμ±: μ½λκ° μμ‘΄νλ λͺ¨λ λλ λΌμ΄λΈλ¬λ¦¬μ λλ€. μ’ μμ±μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ κ²μ κΉ¨λνκ³ ν¨μ¨μ μΈ μ½λλ² μ΄μ€λ₯Ό μ μ§νλ λ° μ€μν©λλ€.
- μ½λ λΆν : μ½λλ₯Ό νμμ λ°λΌ λ‘λν μ μλ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ²ν¬λ‘ λλλ κ²μ λλ€. μ΄λ κ² νλ©΄ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ΄ μ€μ΄λ€κ³ μΈμλ μ±λ₯μ΄ ν₯μλ©λλ€. μλ₯Ό λ€μ΄, λκ·λͺ¨ μ μ μκ±°λ μΉ μ¬μ΄νΈλ μ²μμ μ ν κ²μ μ½λλ§ λ‘λν λ€μ μ¬μ©μκ° κ²°μ λ‘ μ§νν λλ§ κ²°μ μ½λλ₯Ό λ‘λν μ μμ΅λλ€.
- νΈλ¦¬ μμ΄νΉ: λ²λ€μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νλ κ²μ λλ€. μ΄ κΈ°μ μ μ½λλ₯Ό λΆμνκ³ μ€νλμ§ μλ μ½λλ₯Ό μλ³νμ¬ λ²λ€λ¬κ° μ΅μ’ μΆλ ₯μμ μ κ±°ν μ μλλ‘ ν©λλ€.
- μ΅μν: ν¬κΈ°λ₯Ό μ€μ΄κΈ° μν΄ μ½λμμ 곡백, μ£Όμ λ° κΈ°ν λΆνμν λ¬Έμλ₯Ό μ κ±°νλ κ²μ λλ€.
- Gzip μμΆ: λΈλΌμ°μ μ μ 곡νκΈ° μ μ λ²λ€μ μμΆνλ κ²μ λλ€. μ΄λ κ² νλ©΄ νΉν λμ©λ λ²λ€μ κ²½μ° μ μ‘ν΄μΌ νλ λ°μ΄ν° μμ μλΉν μ€μΌ μ μμ΅λλ€.
μΈκΈ° μλ JavaScript λ²λ€ λΆμ λꡬ
JavaScript λ²λ€μ λΆμνκ³ μ΅μ ννλ λ° λμμ΄ λλ λͺ κ°μ§ νλ₯ν λκ΅¬κ° μμ΅λλ€. λ€μμ κ°μ₯ μΈκΈ° μλ μ΅μ μ€ μΌλΆμ λλ€:
Webpack Bundle Analyzer
Webpack Bundle Analyzerλ Webpack λ²λ€μ λ΄μ©μ μκ°ννλ λ° λ리 μ¬μ©λλ μΈκΈ° μλ λꡬμ λλ€. λ²λ€μ λνν νΈλ¦¬μ λ§΅ ννμ μ 곡νμ¬ κ°μ₯ ν° λͺ¨λκ³Ό μ’ μμ±μ λΉ λ₯΄κ² μλ³ν μ μμ΅λλ€.
μ£Όμ κΈ°λ₯:
- λνν νΈλ¦¬μ λ§΅: μ§κ΄μ μΈ νΈλ¦¬μ λ§΅μΌλ‘ λ²λ€μ ν¬κΈ°μ ꡬμ±μ μκ°νν©λλ€.
- λͺ¨λ ν¬κΈ° λΆμ: λ²λ€μμ κ°μ₯ ν° λͺ¨λμ μλ³νκ³ μ λ°μ μΈ λ²λ€ ν¬κΈ°μ λ―ΈμΉλ μν₯μ νμ ν©λλ€.
- μ’ μμ± κ·Έλν: λͺ¨λ κ°μ μ’ μμ±μ νμνκ³ μ μ¬μ μΈ λ³λͺ© νμμ μλ³ν©λλ€.
- Webpackκ³Όμ ν΅ν©: Webpack λΉλ νλ‘μΈμ€μ μννκ² ν΅ν©λ©λλ€.
μ¬μ© μμ:
Webpack Bundle Analyzerλ₯Ό μ¬μ©νλ €λ©΄ κ°λ° μ’ μμ±μΌλ‘ μ€μΉν΄μΌ ν©λλ€:
npm install --save-dev webpack-bundle-analyzer
κ·Έλ° λ€μ λ€μ νλ¬κ·ΈμΈμ Webpack ꡬμ±μ μΆκ°ν©λλ€:
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
// ... other webpack configurations
plugins: [
new BundleAnalyzerPlugin()
]
};
Webpack λΉλλ₯Ό μ€ννλ©΄ λΆμκΈ°κ° λΈλΌμ°μ μμ μ΄ μ μλ HTML λ³΄κ³ μλ₯Ό μμ±ν©λλ€.
Source Map Explorer
Source Map Explorerλ μμ€ λ§΅μ μ¬μ©νμ¬ JavaScript λ²λ€μ λΆμνμ¬ λ²λ€μμ μ½λμ μΆμ²λ₯Ό μλ³ν©λλ€. μ΄λ μ½λλ² μ΄μ€μ μ΄λ€ λΆλΆμ΄ λ²λ€ ν¬κΈ°μ κ°μ₯ ν° μν₯μ λ―ΈμΉλμ§ μ΄ν΄νλ λ° νΉν μ μ©ν©λλ€.
μ£Όμ κΈ°λ₯:
- μμ€ μ½λ κ·μ: λ²λ€ λ΄μ©μ μλ μμ€ μ½λλ‘ λ§€νν©λλ€.
- μμΈν ν¬κΈ° λΆμ: μμ€ νμΌλ³λ‘ λ²λ€ ν¬κΈ°μ λν μμΈν λΆμμ μ 곡ν©λλ€.
- λͺ λ Ήμ€ μΈν°νμ΄μ€: λΉλ μ€ν¬λ¦½νΈμ μ½κ² ν΅ν©νκΈ° μν΄ λͺ λ Ήμ€μμ μ¬μ©ν μ μμ΅λλ€.
μ¬μ© μμ:
Source Map Explorerλ₯Ό μ μμ μΌλ‘ λλ νλ‘μ νΈ μ’ μμ±μΌλ‘ μ€μΉν©λλ€:
npm install -g source-map-explorer
κ·Έλ° λ€μ λ²λ€ λ° μμ€ λ§΅ νμΌμμ λꡬλ₯Ό μ€νν©λλ€:
source-map-explorer dist/bundle.js dist/bundle.js.map
κ·Έλ¬λ©΄ μμ€ νμΌλ³λ‘ λ²λ€ ν¬κΈ° λΆμμ 보μ¬μ£Όλ HTML λ³΄κ³ μκ° λΈλΌμ°μ μμ μ΄λ¦½λλ€.
Bundle Buddy
Bundle Buddyλ μ ν리μΌμ΄μ μ μλ‘ λ€λ₯Έ μ²ν¬μμ μ μ¬μ μΌλ‘ μ€λ³΅λ λͺ¨λμ μλ³νλ λ° λμμ΄ λ©λλ€. μ΄λ λμΌν μ’ μμ±μ΄ μ¬λ¬ μ²ν¬μ ν¬ν¨λ μ μλ μ½λ λΆν λ μ ν리μΌμ΄μ μμ νν λ°μνλ λ¬Έμ μ λλ€.
μ£Όμ κΈ°λ₯:
- μ€λ³΅ λͺ¨λ κ°μ§: μ¬λ¬ μ²ν¬μ ν¬ν¨λ λͺ¨λμ μλ³ν©λλ€.
- μ²ν¬ μ΅μ ν μ μ: μ€λ³΅μ μ€μ΄κΈ° μν΄ μ²ν¬ ꡬμ±μ μ΅μ ννκΈ° μν μ μμ μ 곡ν©λλ€.
- μκ°μ νν: λΆμ κ²°κ³Όλ₯Ό λͺ ννκ³ κ°κ²°ν μκ°μ νμμΌλ‘ νμν©λλ€.
μ¬μ© μμ:
Bundle Buddyλ μΌλ°μ μΌλ‘ Webpack νλ¬κ·ΈμΈμΌλ‘ μ¬μ©λ©λλ€. κ°λ° μ’ μμ±μΌλ‘ μ€μΉν©λλ€:
npm install --save-dev bundle-buddy
κ·Έλ° λ€μ νλ¬κ·ΈμΈμ Webpack ꡬμ±μ μΆκ°ν©λλ€:
const BundleBuddyWebpackPlugin = require('bundle-buddy');
module.exports = {
// ... other webpack configurations
plugins: [
new BundleBuddyWebpackPlugin()
]
};
Webpack λΉλλ₯Ό μ€ννλ©΄ Bundle Buddyκ° μ μ¬μ μΈ μ€λ³΅ λͺ¨λμ κ°μ‘° νμνλ λ³΄κ³ μλ₯Ό μμ±ν©λλ€.
Parcel Bundler
Parcelμ κ°λ¨νκ³ μ¬μ©νκΈ° μ¬μ΄ κ²μΌλ‘ μλ €μ§ μ λ‘ κ΅¬μ± λ²λ€λ¬μ λλ€. Webpack Bundle Analyzerμ κ°μ μ μ© λ²λ€ λΆμκΈ°λ μμ§λ§ λͺ λ Ήμ€ μΆλ ₯ λ° λ΄μ₯ μ΅μ νλ₯Ό ν΅ν΄ λ²λ€ ν¬κΈ° λ° μ’ μμ±μ λν μ μ©ν μ 보λ₯Ό μ 곡ν©λλ€.
μ£Όμ κΈ°λ₯:
- μ λ‘ κ΅¬μ±: μμνλ λ° μ΅μνμ ꡬμ±μ΄ νμν©λλ€.
- μλ μ΅μ ν: μ½λ λΆν , νΈλ¦¬ μμ΄νΉ λ° μ΅μνμ κ°μ λ΄μ₯ μ΅μ νλ₯Ό ν¬ν¨ν©λλ€.
- λΉ λ₯Έ λΉλ μκ°: λΉ λ₯Έ λΉλ μκ°μΌλ‘ μλ €μ Έ μμ΄ μ μν νλ‘ν νμ μ μ λ° κ°λ°μ μ ν©ν©λλ€.
- μμΈν μΆλ ₯: λͺ λ Ήμ€ μΆλ ₯μμ λ²λ€ ν¬κΈ° λ° μ’ μμ±μ λν μμΈν μ 보λ₯Ό μ 곡ν©λλ€.
μ¬μ© μμ:
Parcelμ μ¬μ©νλ €λ©΄ μ μμ μΌλ‘ λλ νλ‘μ νΈ μ’ μμ±μΌλ‘ μ€μΉν©λλ€:
npm install -g parcel-bundler
κ·Έλ° λ€μ μ§μ μ νμΌμμ λ²λ€λ¬λ₯Ό μ€νν©λλ€:
parcel index.html
Parcelμ μλμΌλ‘ μ½λλ₯Ό λ²λ€λ§νκ³ μ½μμμ λ²λ€ ν¬κΈ° λ° μ’ μμ±μ λν μ 보λ₯Ό μ 곡ν©λλ€.
Rollup.js
Rollupμ μμ μ½λ μ‘°κ°μ λΌμ΄λΈλ¬λ¦¬ λλ μ ν리μΌμ΄μ κ³Ό κ°μ΄ λ ν¬κ³ 볡μ‘ν κ²μΌλ‘ μ»΄νμΌνλ JavaScriptμ© λͺ¨λ λ²λ€λ¬μ λλ€. Rollupμ ν¨μ¨μ μΈ νΈλ¦¬ μμ΄νΉ κΈ°λ₯μΌλ‘ μΈν΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§λλ λ° νΉν μ ν©ν©λλ€.
μ£Όμ κΈ°λ₯:
- ν¨μ¨μ μΈ νΈλ¦¬ μμ΄νΉ: μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νμ¬ λ²λ€ ν¬κΈ°λ₯Ό μ€μ΄λ λ° νμν©λλ€.
- ES λͺ¨λ μ§μ: ES λͺ¨λμ μλ²½νκ² μ§μνλ―λ‘ μ½κ² νΈλ¦¬ μμ΄νΉν μ μλ λͺ¨λμ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
- νλ¬κ·ΈμΈ μμ½μμ€ν : Rollupμ κΈ°λ₯μ νμ₯νκΈ° μν νλΆν νλ¬κ·ΈμΈ μμ½μμ€ν μ λλ€.
μ¬μ© μμ:
Rollupμ μ μμ μΌλ‘ λλ νλ‘μ νΈ μ’ μμ±μΌλ‘ μ€μΉν©λλ€:
npm install -g rollup
ꡬμ±μ μ¬μ©νμ¬ `rollup.config.js` νμΌμ λ§λλλ€:
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'iife'
}
};
κ·Έλ° λ€μ Rollupμ μ€ννμ¬ λ²λ€μ λΉλν©λλ€:
rollup -c
λ μμ λ²λ€μ μν μ΅μ ν κΈ°μ
JavaScript λ²λ€μ λΆμν νμλ ν¬κΈ°λ₯Ό μ€μ΄κ³ μ±λ₯μ ν₯μμν€κΈ° μν μ΅μ ν κΈ°μ μ ꡬνν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ ν¨κ³Όμ μΈ μ λ΅μ λλ€:
μ½λ λΆν
μ½λ λΆν μ μ½λλ₯Ό νμμ λ°λΌ λ‘λν μ μλ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ²ν¬λ‘ λλλ νλ‘μΈμ€μ λλ€. μ΄λ κ² νλ©΄ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ΄ μ€μ΄λ€κ³ μΈμλ μ±λ₯μ΄ ν₯μλ©λλ€. μ½λ λΆν μ ꡬννλ λ°©λ²μλ μ¬λ¬ κ°μ§κ° μμ΅λλ€:
- κ²½λ‘ κΈ°λ° λΆν : μ ν리μΌμ΄μ μ μλ‘ λ€λ₯Έ κ²½λ‘ λλ νμ΄μ§λ₯Ό κΈ°λ°μΌλ‘ μ½λλ₯Ό λΆν ν©λλ€. νμ¬ κ²½λ‘μ νμν μ½λλ§ λ‘λν©λλ€.
- κ΅¬μ± μμ κΈ°λ° λΆν : μ ν리μΌμ΄μ μ μλ‘ λ€λ₯Έ κ΅¬μ± μμλ₯Ό κΈ°λ°μΌλ‘ μ½λλ₯Ό λΆν ν©λλ€. νμ¬ κ΅¬μ± μμμ νμν μ½λλ§ λ‘λν©λλ€.
- λμ κ°μ Έμ€κΈ°: λμ κ°μ Έμ€κΈ°(`import()`)λ₯Ό μ¬μ©νμ¬ νμμ λ°λΌ λͺ¨λμ λ‘λν©λλ€. μ΄λ κ² νλ©΄ λͺ¨λ κ²μ 미리 λ‘λνλ λμ νμν λλ§ μ½λλ₯Ό λ‘λν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬μ©μκ° μ°¨νΈκ° ν¬ν¨λ λμ보λλ‘ μ΄λν λλ§ μ°¨νΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ‘λν©λλ€.
νΈλ¦¬ μμ΄νΉ
νΈλ¦¬ μμ΄νΉμ λ²λ€μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νλ κΈ°μ μ λλ€. Webpack, Parcel λ° Rollupκ³Ό κ°μ μ΅μ λ²λ€λ¬μλ λ΄μ₯λ νΈλ¦¬ μμ΄νΉ κΈ°λ₯μ΄ μμ΅λλ€. νΈλ¦¬ μμ΄νΉμ΄ ν¨κ³Όμ μΌλ‘ μλνλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ:
- ES λͺ¨λ μ¬μ©: CommonJS λͺ¨λ(`require`) λμ ES λͺ¨λ(`import` λ° `export`)μ μ¬μ©ν©λλ€. ES λͺ¨λμ μ μ μΌλ‘ λΆμν μ μμΌλ―λ‘ λ²λ€λ¬κ° μ€μ λ‘ μ¬μ©λλ μ½λλ₯Ό νμΈν μ μμ΅λλ€.
- λΆμμ© λ°©μ§: λͺ¨λμμ λΆμμ©μ΄ μλ μ½λλ₯Ό νΌνμΈμ. λΆμμ©μ μ μ μνλ₯Ό μμ νκ±°λ λ€λ₯Έ κ΄μ°° κ°λ₯ν ν¨κ³Όλ₯Ό κ°λ μμ μ λλ€. λ²λ€λ¬λ λΆμμ©μ΄ μλ λͺ¨λμ μμ νκ² μ κ±°νμ§ λͺ»ν μ μμ΅λλ€.
- μμ ν¨μ μ¬μ©: κ°λ₯ν κ²½μ° μμ ν¨μλ₯Ό μ¬μ©ν©λλ€. μμ ν¨μλ νμ λμΌν μ λ ₯μ λν΄ λμΌν μΆλ ₯μ λ°ννκ³ λΆμμ©μ΄ μλ ν¨μμ λλ€.
μ΅μν
μ΅μνλ ν¬κΈ°λ₯Ό μ€μ΄κΈ° μν΄ μ½λμμ 곡백, μ£Όμ λ° κΈ°ν λΆνμν λ¬Έμλ₯Ό μ κ±°νλ νλ‘μΈμ€μ λλ€. λλΆλΆμ λ²λ€λ¬μλ λ΄μ₯λ μ΅μν κΈ°λ₯μ΄ ν¬ν¨λμ΄ μμ΅λλ€. Terser λλ UglifyJSμ κ°μ λ 립ν μ΅μν λꡬλ₯Ό μ¬μ©ν μλ μμ΅λλ€.
Gzip μμΆ
Gzip μμΆμ λΈλΌμ°μ μ μ 곡νκΈ° μ μ λ²λ€μ μμΆνλ κΈ°μ μ λλ€. μ΄λ κ² νλ©΄ νΉν λμ©λ λ²λ€μ κ²½μ° μ μ‘ν΄μΌ νλ λ°μ΄ν° μμ μλΉν μ€μΌ μ μμ΅λλ€. λλΆλΆμ μΉ μλ²λ Gzip μμΆμ μ§μν©λλ€. μλ²κ° JavaScript λ²λ€μ μμΆνλλ‘ κ΅¬μ±λμ΄ μλμ§ νμΈνμμμ€.
μ΄λ―Έμ§ μ΅μ ν
μ΄ κ°μ΄λμμλ JavaScript λ²λ€μ μ€μ μ λκ³ μμ§λ§, μ΄λ―Έμ§λ μΉ μ¬μ΄νΈ ν¬κΈ°μ μλΉν μν₯μ λ―ΈμΉ μ μλ€λ μ μ κΈ°μ΅νλ κ²μ΄ μ€μν©λλ€. λ€μμ ν΅ν΄ μ΄λ―Έμ§λ₯Ό μ΅μ νν©λλ€.
- μ¬λ°λ₯Έ νμ μ ν: μ΄λ―Έμ§ μ ν λ° μμΆ μꡬ μ¬νμ λ°λΌ WebP, JPEG λλ PNGμ κ°μ μ μ ν μ΄λ―Έμ§ νμμ μ¬μ©ν©λλ€.
- μ΄λ―Έμ§ μμΆ: μ΄λ―Έμ§ μμΆ λꡬλ₯Ό μ¬μ©νμ¬ νμ§ μ ν μμ΄ μ΄λ―Έμ§ νμΌ ν¬κΈ°λ₯Ό μ€μ λλ€.
- λ°μν μ΄λ―Έμ§ μ¬μ©: μ¬μ©μμ μ₯μΉ λ° νλ©΄ ν΄μλμ λ°λΌ λ€λ₯Έ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ 곡ν©λλ€.
- μ§μ° λ‘λ© μ΄λ―Έμ§: λ·°ν¬νΈμ νμλ λλ§ μ΄λ―Έμ§λ₯Ό λ‘λν©λλ€.
μ’ μμ± κ΄λ¦¬
μ’ μμ±μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ κ²μ κΉ¨λνκ³ ν¨μ¨μ μΈ μ½λλ² μ΄μ€λ₯Ό μ μ§νλ λ° μ€μν©λλ€. μ’ μμ±μ κ΄λ¦¬νκΈ° μν λͺ κ°μ§ νμ λ€μκ³Ό κ°μ΅λλ€.
- λΆνμν μ’ μμ± λ°©μ§: μ½λμ μ€μ λ‘ νμν μ’ μμ±λ§ ν¬ν¨ν©λλ€.
- μ’ μμ± μ΅μ μν μ μ§: λ²κ·Έ μμ , μ±λ₯ ν₯μ λ° μλ‘μ΄ κΈ°λ₯μ νμ©νκΈ° μν΄ μ’ μμ±μ μ κΈ°μ μΌλ‘ μ λ°μ΄νΈν©λλ€.
- ν¨ν€μ§ κ΄λ¦¬μ μ¬μ©: npm λλ yarnκ³Ό κ°μ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό μ¬μ©νμ¬ μ’ μμ±μ κ΄λ¦¬ν©λλ€.
- νΌμ΄ μ’ μμ± κ³ λ €: μΆ©λμ λ°©μ§νκ³ νΈνμ±μ 보μ₯νκΈ° μν΄ νΌμ΄ μ’ μμ±μ μ¬λ°λ₯΄κ² μ΄ν΄νκ³ κ΄λ¦¬ν©λλ€.
- μ’ μμ± κ°μ¬: 보μ μ·¨μ½μ±μ λν΄ μ’ μμ±μ μ κΈ°μ μΌλ‘ κ°μ¬ν©λλ€. `npm audit` λ° `yarn audit`μ κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ μ·¨μ½μ±μ μλ³νκ³ μμ ν μ μμ΅λλ€.
μΊμ±
λΈλΌμ°μ μΊμ±μ νμ©νμ¬ μλ²μ λν μμ² μλ₯Ό μ€μ λλ€. μλ²λ₯Ό ꡬμ±νμ¬ JavaScript λ²λ€ λ° κΈ°ν μ μ μμ°μ μ μ ν μΊμ ν€λλ₯Ό μ€μ ν©λλ€. μ΄λ κ² νλ©΄ λΈλΌμ°μ κ° μ΄λ¬ν μμ°μ λ‘컬μ μ μ₯νκ³ νμ λ°©λ¬Έ μ μ¬μ¬μ©ν μ μμΌλ―λ‘ λ‘λ© μκ°μ΄ ν¬κ² κ°μ λ©λλ€.
JavaScript λ²λ€ μ΅μ νλ₯Ό μν λͺ¨λ² μ¬λ‘
JavaScript λ²λ€μ΄ μ±λ₯μ μ΅μ νλλλ‘ νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ:
- λ²λ€ μ κΈ°μ μΌλ‘ λΆμ: κ°λ° μν¬νλ‘μ μΌλΆλ‘ λ²λ€ λΆμμ μ κΈ°μ μΌλ‘ μνν©λλ€. λ²λ€ λΆμ λꡬλ₯Ό μ¬μ©νμ¬ μ μ¬μ μΈ μ΅μ ν κΈ°νλ₯Ό μλ³ν©λλ€.
- μ±λ₯ μμ° μ€μ : μ ν리μΌμ΄μ μ λν μ±λ₯ μμ°μ μ μνκ³ ν΄λΉ μμ°μ λν μ§ν μν©μ μΆμ ν©λλ€. μλ₯Ό λ€μ΄ μ΅λ λ²λ€ ν¬κΈ° λλ μ΅λ λ‘λ μκ°μ λν μμ°μ μ€μ ν μ μμ΅λλ€.
- μ΅μ ν μλν: λΉλ λꡬ λ° μ§μμ ν΅ν© μμ€ν μ μ¬μ©νμ¬ λ²λ€ μ΅μ ν νλ‘μΈμ€λ₯Ό μλνν©λλ€. μ΄λ κ² νλ©΄ λ²λ€μ΄ νμ μ΅μ νλ©λλ€.
- μ±λ₯ λͺ¨λν°λ§: νλ‘λμ μμ μ ν리μΌμ΄μ μ μ±λ₯μ λͺ¨λν°λ§ν©λλ€. μ±λ₯ λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ μ΅μ ν λ Έλ ₯μ μν₯μ μΆμ ν©λλ€. Google PageSpeed Insights λ° WebPageTestμ κ°μ λꡬλ μΉ μ¬μ΄νΈ μ±λ₯μ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€.
- μ΅μ μν μ μ§: μ΅μ μΉ κ°λ° λͺ¨λ² μ¬λ‘ λ° λꡬμ λν μ΅μ μ 보λ₯Ό μ μ§ν©λλ€. μΉ κ°λ° νκ²½μ λμμμ΄ μ§ννκ³ μμΌλ―λ‘ μλ‘μ΄ κΈ°μ κ³Ό κΈ°μ μ λν μ 보λ₯Ό μ»λ κ²μ΄ μ€μν©λλ€.
μ€μ μμ λ° μ¬λ‘ μ°κ΅¬
λ§μ κΈ°μ λ€μ΄ μΉ μ¬μ΄νΈ μ±λ₯μ ν₯μμν€κΈ° μν΄ JavaScript λ²λ€μ μ±κ³΅μ μΌλ‘ μ΅μ ννμ΅λλ€. λ€μμ λͺ κ°μ§ μμ λλ€:
- Netflix: Netflixλ λ²λ€ λΆμ λ° μ½λ λΆν μ ν¬ν¨νμ¬ μ±λ₯ μ΅μ νμ λ§μ ν¬μλ₯Ό ν΄μμ΅λλ€. νμ¬ νμ΄μ§μ νμν μ½λλ§ λ‘λνμ¬ μ΄κΈ° λ‘λ μκ°μ ν¬κ² μ€μμ΅λλ€.
- Airbnb: Airbnbλ μ½λ λΆν μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μλ‘ λ€λ₯Έ λΆλΆμ νμμ λ°λΌ λ‘λν©λλ€. μ΄λ₯Ό ν΅ν΄ μΈν°λ· μ°κ²° μλκ° λλ¦° μ¬μ©μμκ²λ λΉ λ₯΄κ³ λ°μμ±μ΄ λ°μ΄λ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€.
- Google: Googleμ νΈλ¦¬ μμ΄νΉ, μ΅μν λ° Gzip μμΆμ ν¬ν¨ν λ€μν μ΅μ ν κΈ°μ μ μ¬μ©νμ¬ μΉ μ¬μ΄νΈκ° λΉ λ₯΄κ² λ‘λλλλ‘ ν©λλ€.
μ΄λ¬ν μλ κ³ μ±λ₯ μΉ μ ν리μΌμ΄μ μ μ 곡νκΈ° μν λ²λ€ λΆμ λ° μ΅μ νμ μ€μμ±μ 보μ¬μ€λλ€. μ΄ κ°μ΄λμ μ€λͺ λ κΈ°μ κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄, μ체 μΉ μ ν리μΌμ΄μ μ μ±λ₯μ ν¬κ² ν₯μμν€κ³ μ μΈκ³ μ¬μ©μμκ² λ λμ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€.
κ²°λ‘
JavaScript λ²λ€ λΆμ λ° μ΅μ νλ μ±λ₯μ΄ μ’κ³ ν¨μ¨μ μΈ μΉ μ ν리μΌμ΄μ μ μ 곡νλ λ° μ€μν©λλ€. μ΄ κ°μ΄λμμ λ Όμλ κ°λ μ μ΄ν΄νκ³ , μ μ ν λꡬλ₯Ό μ¬μ©νκ³ , λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ λ²λ€ ν¬κΈ°λ₯Ό ν¬κ² μ€μ΄κ³ , μΉ μ¬μ΄νΈμ λ‘λ© μκ°μ κ°μ νλ©°, μ μΈκ³ μ¬μ©μμκ² λ λμ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. λ²λ€μ μ κΈ°μ μΌλ‘ λΆμνκ³ , μ±λ₯ μμ°μ μ€μ νκ³ , μ΅μ ν νλ‘μΈμ€λ₯Ό μλννμ¬ μΉ μ ν리μΌμ΄μ μ΄ νμ μ±λ₯μ μ΅μ νλλλ‘ ν©λλ€. μ΅μ νλ μ§μμ μΈ νλ‘μΈμ€μ΄λ©°, μ§μμ μΈ κ°μ μ΄ μ΅κ³ μ μ¬μ©μ κ²½νμ μ 곡νλ λ° ν΅μ¬μ΄λΌλ μ μ κΈ°μ΅νμμμ€.